λ°λ³΅μ ν¬νΌ μ΅μ ν κΈ°μ λ‘ μ΅κ³ μ JavaScript μ±λ₯μ λ°ννμΈμ. μ€νΈλ¦Ό μ²λ¦¬κ° ν¨μ¨μ±μ λμ΄κ³ , λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄λ©°, μ ν리μΌμ΄μ μλ΅μ±μ ν₯μμν€λ λ°©λ²μ μμ보μΈμ.
JavaScript λ°λ³΅μ ν¬νΌ μ±λ₯ μ΅μ ν: μ€νΈλ¦Ό μ²λ¦¬ ν₯μ
JavaScript λ°λ³΅μ ν¬νΌ(μ: map, filter, reduce)λ λ°μ΄ν° 컬λ μ
μ μ‘°μνλ κ°λ ₯ν λꡬμ
λλ€. κ°κ²°νκ³ κ°λ
μ±μ΄ λ°μ΄λ ꡬ문μ μ 곡νλ©° ν¨μν νλ‘κ·Έλλ° μμΉκ³Ό μ μΌμΉν©λλ€. κ·Έλ¬λ λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λλ μ΄λ¬ν ν¬νΌλ₯Ό 무λΆλ³νκ² μ¬μ©νλ©΄ μ±λ₯ λ³λͺ© νμμ΄ λ°μν μ μμ΅λλ€. μ΄ κΈ°μ¬μμλ λ°λ³΅μ ν¬νΌ μ±λ₯μ μ΅μ ννλ κ³ κΈ κΈ°μ μ μ΄ν΄λ³΄κ³ μ€νΈλ¦Ό μ²λ¦¬ λ° μ§μ° νκ°μ μ€μ μ λμ΄ λ³΄λ€ ν¨μ¨μ μ΄κ³ μλ΅μ±μ΄ λ°μ΄λ JavaScript μ ν리μΌμ΄μ
μ λ§λλ λ°©λ²μ μ΄ν΄λ΄
λλ€.
λ°λ³΅μ ν¬νΌμ μ±λ₯ μν₯μ μ΄ν΄νκΈ°
κΈ°μ‘΄ λ°λ³΅μ ν¬νΌλ μ¦μ μλν©λλ€. μ¦, μ 체 컬λ μ μ μ¦μ μ²λ¦¬νμ¬ κ° μμ μ λν μ€κ° λ°°μ΄μ λ©λͺ¨λ¦¬μ μμ±ν©λλ€. λ€μ μμ λ₯Ό κ³ λ €ν΄ λ³΄μμμ€.
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const evenNumbers = numbers.filter(num => num % 2 === 0);
const squaredEvenNumbers = evenNumbers.map(num => num * num);
const sumOfSquaredEvenNumbers = squaredEvenNumbers.reduce((acc, num) => acc + num, 0);
console.log(sumOfSquaredEvenNumbers); // Output: 100
μ΄ λ³΄κΈ°μλ κ°λ¨ν μ½λμμ filter, map, λ§μ§λ§μΌλ‘ reduce μ°μ°μμ κ²°κ³Όλ₯Ό κ³μ°νμ¬ μΈ κ°μ μ€κ° λ°°μ΄μ΄ μμ±λ©λλ€. μμ λ°°μ΄μ κ²½μ° μ΄ μ€λ²ν€λλ 무μν μ μμ΅λλ€. κ·Έλ¬λ μλ°±λ§ κ°μ νλͺ©μ΄ μλ λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬νλ€κ³ μμν΄ λ³΄μμμ€. κ΄λ ¨λ λ©λͺ¨λ¦¬ ν λΉ λ° κ°λΉμ§ μμ§μ μλΉν μ±λ₯ μ ν μμΈμ΄ λ©λλ€. μ΄λ λͺ¨λ°μΌ μ₯μΉλ μλ² λλ μμ€ν
κ³Ό κ°μ΄ 리μμ€κ° μ νλ νκ²½μμ νΉν ν° μν₯μ λ―ΈμΉ©λλ€.
μ€νΈλ¦Ό μ²λ¦¬ λ° μ§μ° νκ° μκ°
μ€νΈλ¦Ό μ²λ¦¬λ λ³΄λ€ ν¨μ¨μ μΈ λμμ μ 곡ν©λλ€. μ 체 컬λ μ μ ν λ²μ μ²λ¦¬νλ λμ μ€νΈλ¦Ό μ²λ¦¬λ μ΄λ₯Ό λ μμ μ²ν¬ λλ μμλ‘ λΆν νκ³ νμμ λ°λΌ ν λ²μ νλμ© μ²λ¦¬ν©λλ€. μ΄λ μ’ μ’ μ§μ° νκ°μ κ²°ν©λμ΄ κ³μ° κ²°κ³Όκ° μ€μ λ‘ νμν λκΉμ§ κ³μ°μ΄ μ§μ°λ©λλ€. λ³Έμ§μ μΌλ‘, μ΅μ’ κ²°κ³Όκ° μμ²λ λλ§ μ€νλλ μΌλ ¨μ μμ μ ꡬμΆν©λλ€.
μ§μ° νκ°λ λΆνμν κ³μ°μ λ°©μ§νμ¬ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ²λ¦¬λ λ°°μ΄μ μ²μ λͺ κ° μμλ§ νμν κ²½μ° μ 체 λ°°μ΄μ κ³μ°ν νμκ° μμ΅λλ€. μ€μ λ‘ μ¬μ©λλ μμλ§ κ³μ°ν©λλ€.
JavaScriptμμ μ€νΈλ¦Ό μ²λ¦¬ ꡬν
JavaScriptμλ Java(Stream API μ¬μ©) λλ Pythonκ³Ό κ°μ μΈμ΄μ λλ±ν κΈ°λ³Έ μ 곡 μ€νΈλ¦Ό μ²λ¦¬ κΈ°λ₯μ΄ μμ§λ§, μμ±κΈ° λ° μ¬μ©μ μ§μ λ°λ³΅μ ꡬνμ μ¬μ©νμ¬ μ μ¬ν κΈ°λ₯μ μ»μ μ μμ΅λλ€.
μ§μ° νκ°λ₯Ό μν μμ±κΈ° μ¬μ©
μμ±κΈ°λ JavaScriptμ κ°λ ₯ν κΈ°λ₯μΌλ‘, μΌμ μ€μ§νκ³ λ€μ μμν μ μλ ν¨μλ₯Ό μ μν μ μμ΅λλ€. μ§μ° λ°©μμΌλ‘ μΌλ ¨μ κ°μ λ°λ³΅νλ λ° μ¬μ©ν μ μλ λ°λ³΅μλ₯Ό λ°νν©λλ€.
function* evenNumbers(numbers) {
for (const num of numbers) {
if (num % 2 === 0) {
yield num;
}
}
}
function* squareNumbers(numbers) {
for (const num of numbers) {
yield num * num;
}
}
function reduceSum(numbers) {
let sum = 0;
for (const num of numbers) {
sum += num;
}
return sum;
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const even = evenNumbers(numbers);
const squared = squareNumbers(even);
const sum = reduceSum(squared);
console.log(sum); // Output: 100
μ΄ μμμ evenNumbers λ° squareNumbersλ μμ±κΈ°μ
λλ€. λͺ¨λ μ§μ λλ μ κ³±μλ₯Ό ν λ²μ κ³μ°νμ§ μμ΅λλ€. λμ , νμμ λ°λΌ κ° κ°μ yield ν©λλ€. reduceSum ν¨μλ μ κ³±μλ₯Ό λ°λ³΅νκ³ ν©κ³λ₯Ό κ³μ°ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ€κ° λ°°μ΄ μμ±μ λ°©μ§νμ¬ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄κ³ μ±λ₯μ ν₯μμν΅λλ€.
μ¬μ©μ μ§μ λ°λ³΅μ ν΄λμ€ λ§λ€κΈ°
λ³΄λ€ λ³΅μ‘ν μ€νΈλ¦Ό μ²λ¦¬ μλ리μ€μ κ²½μ° μ¬μ©μ μ§μ λ°λ³΅μ ν΄λμ€λ₯Ό λ§λ€ μ μμ΅λλ€. μ΄λ κ² νλ©΄ λ°λ³΅ νλ‘μΈμ€λ₯Ό λ³΄λ€ ν¨κ³Όμ μΌλ‘ μ μ΄νκ³ μ¬μ©μ μ§μ λ³ν λ° νν°λ§ λ‘μ§μ ꡬνν μ μμ΅λλ€.
class FilterIterator {
constructor(iterator, predicate) {
this.iterator = iterator;
this.predicate = predicate;
}
next() {
let nextValue = this.iterator.next();
while (!nextValue.done && !this.predicate(nextValue.value)) {
nextValue = this.iterator.next();
}
return nextValue;
}
[Symbol.iterator]() {
return this;
}
}
class MapIterator {
constructor(iterator, transform) {
this.iterator = iterator;
this.transform = transform;
}
next() {
const nextValue = this.iterator.next();
if (nextValue.done) {
return nextValue;
}
return { value: this.transform(nextValue.value), done: false };
}
[Symbol.iterator]() {
return this;
}
}
// Example Usage:
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const numberIterator = numbers[Symbol.iterator]();
const evenIterator = new FilterIterator(numberIterator, num => num % 2 === 0);
const squareIterator = new MapIterator(evenIterator, num => num * num);
let sum = 0;
for (const num of squareIterator) {
sum += num;
}
console.log(sum); // Output: 100
μ΄ μμ μμλ λ κ°μ λ°λ³΅μ ν΄λμ€(FilterIterator λ° MapIterator)λ₯Ό μ μν©λλ€. μ΄λ¬ν ν΄λμ€λ κΈ°μ‘΄ λ°λ³΅μλ₯Ό λννκ³ μ§μ° λ°©μμΌλ‘ νν°λ§ λ° λ³ν λ‘μ§μ μ μ©ν©λλ€. [Symbol.iterator]() λ©μλλ μ΄λ¬ν ν΄λμ€λ₯Ό λ°λ³΅ κ°λ₯νκ² λ§λ€μ΄ for...of 루νμμ μ¬μ©ν μ μλλ‘ ν©λλ€.
μ±λ₯ λ²€μΉλ§νΉ λ° κ³ λ € μ¬ν
μ€νΈλ¦Ό μ²λ¦¬μ μ±λ₯ μ΄μ μ λ°μ΄ν° μΈνΈ ν¬κΈ°κ° μ¦κ°ν¨μ λ°λΌ λμ± λΆλͺ ν΄μ§λλ€. μ€νΈλ¦Ό μ²λ¦¬κ° μ€μ λ‘ νμνμ§ νμΈνλ €λ©΄ μ€μ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ μ½λλ₯Ό λ²€μΉλ§νΉνλ κ²μ΄ μ€μν©λλ€.
μ±λ₯μ νκ°ν λ κ³ λ €ν΄μΌ ν λͺ κ°μ§ μ£Όμ μ¬νμ λ€μκ³Ό κ°μ΅λλ€.
- λ°μ΄ν° μΈνΈ ν¬κΈ°: μ€νΈλ¦Ό μ²λ¦¬λ λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν λ ν¨κ³Όμ μ λλ€. μμ λ°μ΄ν° μΈνΈμ κ²½μ° μμ±κΈ° λλ λ°λ³΅μλ₯Ό μμ±νλ μ€λ²ν€λκ° μ΄μ μ λ₯κ°ν μ μμ΅λλ€.
- μμ μ 볡μ‘μ±: λ³ν λ° νν°λ§ μμ μ΄ λ³΅μ‘ν μλ‘ μ§μ° νκ°λ‘ μΈν μ μ¬μ μΈ μ±λ₯ ν₯μμ΄ μ»€μ§λλ€.
- λ©λͺ¨λ¦¬ μ μ½: μ€νΈλ¦Ό μ²λ¦¬λ λ©λͺ¨λ¦¬ μ¬μ©λμ μ€μ΄λ λ° λμμ΄ λλ©°, μ΄λ 리μμ€κ° μ νλ νκ²½μμ νΉν μ€μν©λλ€.
- λΈλΌμ°μ /μμ§ μ΅μ ν: JavaScript μμ§μ μ§μμ μΌλ‘ μ΅μ νλκ³ μμ΅λλ€. μ΅μ μμ§μ κΈ°μ‘΄ λ°λ³΅μ ν¬νΌμ λν΄ νΉμ μ΅μ νλ₯Ό μνν μ μμ΅λλ€. νμ λ²€μΉλ§νΉνμ¬ λμ νκ²½μμ κ°μ₯ μ±λ₯μ΄ μ’μμ§ νμΈνμμμ€.
λ²€μΉλ§νΉ μμ
console.timeκ³Ό console.timeEndλ₯Ό μ¬μ©νμ¬ eager λ°©μκ³Ό lazy λ°©μμ μ€ν μκ°μ λͺ¨λ μΈ‘μ νλ λ€μ λ²€μΉλ§ν¬λ₯Ό κ³ λ €ν΄ λ³΄μμμ€.
const largeArray = Array.from({ length: 1000000 }, (_, i) => i + 1);
// Eager approach
console.time("Eager");
const eagerEven = largeArray.filter(num => num % 2 === 0);
const eagerSquared = eagerEven.map(num => num * num);
const eagerSum = eagerSquared.reduce((acc, num) => acc + num, 0);
console.timeEnd("Eager");
// Lazy approach (using generators from previous example)
console.time("Lazy");
const lazyEven = evenNumbers(largeArray);
const lazySquared = squareNumbers(lazyEven);
const lazySum = reduceSum(lazySquared);
console.timeEnd("Lazy");
//console.log({eagerSum, lazySum}); // Verify results are the same (uncomment for verification)
μ΄ λ²€μΉλ§ν¬μ κ²°κ³Όλ νλμ¨μ΄ λ° JavaScript μμ§μ λ°λΌ λ€λ₯΄μ§λ§ μΌλ°μ μΌλ‘ lazy λ°©μμ΄ λκ·λͺ¨ λ°μ΄ν° μΈνΈμ λν΄ μλΉν μ±λ₯ ν₯μμ 보μ¬μ€λλ€.
κ³ κΈ μ΅μ ν κΈ°μ
κΈ°λ³Έ μ€νΈλ¦Ό μ²λ¦¬λ₯Ό λμ΄, μ¬λ¬ κ³ κΈ μ΅μ ν κΈ°μ μ ν΅ν΄ μ±λ₯μ λμ± ν₯μμν¬ μ μμ΅λλ€.
μμ μ΅ν©
μ΅ν©μ μ¬λ¬ λ°λ³΅μ ν¬νΌ μμ μ λ¨μΌ ν¨μ€λ‘ κ²°ν©νλ κ²μ ν¬ν¨ν©λλ€. μλ₯Ό λ€μ΄, νν°λ§ν λ€μ λ§€ννλ λμ λ¨μΌ λ°λ³΅μμμ λ μμ μ λͺ¨λ μνν μ μμ΅λλ€.
function* fusedOperation(numbers) {
for (const num of numbers) {
if (num % 2 === 0) {
yield num * num; // Filter and map in one step
}
}
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const fused = fusedOperation(numbers);
const sum = reduceSum(fused);
console.log(sum); // Output: 100
μ΄λ κ² νλ©΄ λ°λ³΅ νμμ μμ±λ μ€κ° λ°μ΄ν° μμ΄ μ€μ΄λλλ€.
λ¨λ½ νκ°
λ¨λ½ νκ°λ μνλ κ²°κ³Όκ° λ°κ²¬λλ μ¦μ λ°λ³΅μ μ€λ¨νλ κ²μ ν¬ν¨ν©λλ€. μλ₯Ό λ€μ΄, ν° λ°°μ΄μμ νΉμ κ°μ κ²μνλ κ²½μ° ν΄λΉ κ°μ μ°Ύμλ§μ λ°λ³΅μ μ€λ¨ν μ μμ΅λλ€.
function findFirst(numbers, predicate) {
for (const num of numbers) {
if (predicate(num)) {
return num; // Stop iterating when the value is found
}
}
return undefined; // Or null, or a sentinel value
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const firstEven = findFirst(numbers, num => num % 2 === 0);
console.log(firstEven); // Output: 2
μ΄λ κ² νλ©΄ μνλ κ²°κ³Όκ° λ¬μ±λλ©΄ λΆνμν λ°λ³΅μ΄ λ°©μ§λ©λλ€. νμ€ λ°λ³΅μ ν¬νΌ(μ: `find`)λ μ΄λ―Έ λ¨λ½ νκ°λ₯Ό ꡬννμ§λ§ νΉμ μλ리μ€μμλ μ¬μ©μ μ§μ λ¨λ½ νκ°λ₯Ό ꡬννλ κ²μ΄ μ 리ν μ μμ΅λλ€.
λ³λ ¬ μ²λ¦¬ (μ£Όμ)
νΉμ μλ리μ€μμλ νΉν κ³μ° μ§μ½μ μΈ μμ μ μ²λ¦¬ν λ λ³λ ¬ μ²λ¦¬κ° μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. JavaScriptλ λΈλΌμ°μ μμ μ§μ ν λ³λ ¬ μ²λ¦¬λ₯Ό κΈ°λ³Έμ μΌλ‘ μ§μνμ§ μμ΅λλ€(μ£Ό μ€λ λμ λ¨μΌ μ€λ λ νΉμ± λλ¬Έ). κ·Έλ¬λ Web Workerλ₯Ό μ¬μ©νμ¬ μμ μ λ³λμ μ€λ λλ‘ μ€νλ‘λν μ μμ΅λλ€. κ·Έλ¬λ μ€λ λ κ°μ λ°μ΄ν°λ₯Ό μ μ‘νλ μ€λ²ν€λκ° λλ‘λ μ΄μ μ λ₯κ°ν μ μμΌλ―λ‘ μ£Όμνμμμ€. λ³λ ¬ μ²λ¦¬λ μΌλ°μ μΌλ‘ λ 립μ μΈ λ°μ΄ν° μ²ν¬μμ μλνλ κ³μ° λΆνκ° ν° μμ μ λ μ ν©ν©λλ€.
λ³λ ¬ μ²λ¦¬ μμ λ λ 볡μ‘νλ©° μ΄ μκ° ν λ‘ μ λ²μλ₯Ό λ²μ΄λμ§λ§ μΌλ°μ μΈ μμ΄λμ΄λ μ λ ₯ λ°μ΄ν°λ₯Ό μ²ν¬λ‘ λλμ΄ κ° μ²ν¬λ₯Ό Web Workerλ‘ λ³΄λ΄ μ²λ¦¬ν λ€μ κ²°κ³Όλ₯Ό κ²°ν©νλ κ²μ λλ€.
μ€μ μ ν리μΌμ΄μ λ° μμ
μ€νΈλ¦Ό μ²λ¦¬λ λ€μν μ€μ μ ν리μΌμ΄μ μμ μ μ©ν©λλ€.
- λ°μ΄ν° λΆμ: μΌμ λ°μ΄ν°, κΈμ΅ κ±°λ λλ μ¬μ©μ νλ λ‘κ·Έμ λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό μ²λ¦¬ν©λλ€. μΉ νΈλν½ ν¨ν΄ λΆμ, λ€νΈμν¬ νΈλν½μ μ΄μ κ°μ§ λλ λλμ κ³Όν λ°μ΄ν° μ²λ¦¬ λ±μ΄ μμ΅λλ€.
- μ΄λ―Έμ§ λ° λΉλμ€ μ²λ¦¬: μ΄λ―Έμ§ λ° λΉλμ€ μ€νΈλ¦Όμ νν°, λ³ν λ° κΈ°ν μμ μ μ μ©ν©λλ€. μλ₯Ό λ€μ΄, μΉ΄λ©λΌ νΌλμμ λΉλμ€ νλ μμ μ²λ¦¬νκ±°λ λκ·λͺ¨ μ΄λ―Έμ§ λ°μ΄ν° μΈνΈμ μ΄λ―Έμ§ μΈμ μκ³ λ¦¬μ¦μ μ μ©ν©λλ€.
- μ€μκ° λ°μ΄ν° μ€νΈλ¦Ό: μ£Όμ μμΈ, μμ λ―Έλμ΄ νΌλ λλ IoT μ₯μΉμ κ°μ μμ€μμ μ€μκ° λ°μ΄ν°λ₯Ό μ²λ¦¬ν©λλ€. μ€μκ° λμ보λ ꡬμΆ, μμ λ―Έλμ΄ κ°μ± λΆμ λλ μ°μ μ₯λΉ λͺ¨λν°λ§ λ±μ΄ μμ΅λλ€.
- κ²μ κ°λ°: λ§μ μμ κ²μ κ°μ²΄λ₯Ό μ²λ¦¬νκ±°λ 볡μ‘ν κ²μ λ‘μ§μ μ²λ¦¬ν©λλ€.
- λ°μ΄ν° μκ°ν: μΉ μ ν리μΌμ΄μ μμ λνν μκ°νλ₯Ό μν΄ λκ·λͺ¨ λ°μ΄ν° μΈνΈλ₯Ό μ€λΉν©λλ€.
μ΅μ μ£Όκ°λ₯Ό νμνλ μ€μκ° λμ보λλ₯Ό ꡬμΆνλ μλ리μ€λ₯Ό κ³ λ €ν΄ λ³΄μμμ€. μλ²μμ μ£Όμ λ°μ΄ν° μ€νΈλ¦Όμ μμ νκ³ μμΌλ©° νΉμ κ°κ²© μκ³κ°μ μΆ©μ‘±νλ μ£Όμμ νν°λ§ν λ€μ ν΄λΉ μ£Όμμ νκ· κ°κ²©μ κ³μ°ν΄μΌ ν©λλ€. μ€νΈλ¦Ό μ²λ¦¬λ₯Ό μ¬μ©νλ©΄ μ 체 μ€νΈλ¦Όμ λ©λͺ¨λ¦¬μ μ μ₯ν νμ μμ΄ κ° μ£Όκ°κ° λμ°©νλ λλ‘ μ²λ¦¬ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ λλμ μ€μκ° λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ μλ΅μ±μ΄ λ°μ΄λκ³ ν¨μ¨μ μΈ λμ보λλ₯Ό ꡬμΆν μ μμ΅λλ€.
μ¬λ°λ₯Έ μ κ·Ό λ°©μ μ ν
μ€νΈλ¦Ό μ²λ¦¬ μ¬μ© μκΈ°λ₯Ό κ²°μ νλ €λ©΄ μ μ€ν κ³ λ €κ° νμν©λλ€. λκ·λͺ¨ λ°μ΄ν° μΈνΈμ μλΉν μ±λ₯ μ΄μ μ μ 곡νμ§λ§ μ½λκ° λ³΅μ‘ν΄μ§ μ μμ΅λλ€. μμ¬ κ²°μ κ°μ΄λλ λ€μκ³Ό κ°μ΅λλ€.
- μμ λ°μ΄ν° μΈνΈ: μμ λ°μ΄ν° μΈνΈ(μ: μμκ° 100κ° λ―Έλ§μΈ λ°°μ΄)μ κ²½μ° κΈ°μ‘΄ λ°λ³΅μ ν¬νΌκ° μ’ μ’ μΆ©λΆν©λλ€. μ€νΈλ¦Ό μ²λ¦¬μ μ€λ²ν€λκ° μ΄μ μ λ₯κ°ν μ μμ΅λλ€.
- μ€κ° λ°μ΄ν° μΈνΈ: μ€κ° ν¬κΈ° λ°μ΄ν° μΈνΈ(μ: μμκ° 100κ°μμ 10,000κ° μ¬μ΄μΈ λ°°μ΄)μ κ²½μ° λ³΅μ‘ν λ³ν λλ νν°λ§ μμ μ μννλ κ²½μ° μ€νΈλ¦Ό μ²λ¦¬λ₯Ό κ³ λ €νμμμ€. λ κ°μ§ μ κ·Ό λ°©μμ λͺ¨λ λ²€μΉλ§νΉνμ¬ μ΄λ κ²μ΄ λ λμμ§ νμΈνμμμ€.
- λκ·λͺ¨ λ°μ΄ν° μΈνΈ: λκ·λͺ¨ λ°μ΄ν° μΈνΈ(μ: μμκ° 10,000κ° μ΄μμΈ λ°°μ΄)μ κ²½μ° μΌλ°μ μΌλ‘ μ€νΈλ¦Ό μ²λ¦¬κ° μ νΈλλ μ κ·Ό λ°©μμ λλ€. λ©λͺ¨λ¦¬ μ¬μ©λμ ν¬κ² μ€μ΄κ³ μ±λ₯μ ν₯μμν¬ μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ μ μ½: 리μμ€κ° μ νλ νκ²½(μ: λͺ¨λ°μΌ μ₯μΉ λλ μλ² λλ μμ€ν )μμ μμ νλ κ²½μ° μ€νΈλ¦Ό μ²λ¦¬κ° νΉν μ μ©ν©λλ€.
- μ€μκ° λ°μ΄ν°: μ€μκ° λ°μ΄ν° μ€νΈλ¦Όμ μ²λ¦¬νλ κ²½μ° μ€νΈλ¦Ό μ²λ¦¬κ° μ’ μ’ μ μΌν μ€ν κ°λ₯ν μ΅μ μ λλ€.
- μ½λ κ°λ μ±: μ€νΈλ¦Ό μ²λ¦¬λ μ±λ₯μ ν₯μμν¬ μ μμ§λ§ μ½λμ 볡μ‘μ±μ λμΌ μλ μμ΅λλ€. μ±λ₯κ³Ό κ°λ μ± κ°μ κ· νμ λ§μΆμμμ€. μ€νΈλ¦Ό μ²λ¦¬μ λν μμ μμ€μ μΆμνλ₯Ό μ 곡νμ¬ μ½λλ₯Ό λ¨μννλ λΌμ΄λΈλ¬λ¦¬ μ¬μ©μ κ³ λ €νμμμ€.
λΌμ΄λΈλ¬λ¦¬ λ° λꡬ
μ¬λ¬ JavaScript λΌμ΄λΈλ¬λ¦¬κ° μ€νΈλ¦Ό μ²λ¦¬λ₯Ό λ¨μννλ λ° λμμ΄ λ μ μμ΅λλ€.
- transducers-js: JavaScriptμ©μΌλ‘ κ΅¬μ± κ°λ₯νκ³ μ¬μ¬μ© κ°λ₯ν λ³ν ν¨μλ₯Ό μ 곡νλ λΌμ΄λΈλ¬λ¦¬μ λλ€. μ§μ° νκ°λ₯Ό μ§μνλ©° ν¨μ¨μ μΈ λ°μ΄ν° μ²λ¦¬ νμ΄νλΌμΈμ ꡬμΆν μ μμ΅λλ€.
- Highland.js: λΉλκΈ° λ°μ΄ν° μ€νΈλ¦Όμ κ΄λ¦¬νκΈ° μν λΌμ΄λΈλ¬λ¦¬μ λλ€. μ€νΈλ¦Όμ νν°λ§, λ§€ν, μΆμ λ° λ³ννκΈ° μν νλΆν μ°μ°μ μ§ν©μ μ 곡ν©λλ€.
- RxJS (JavaScriptμ© λ°μν νμ₯): Observable μνμ€λ₯Ό μ¬μ©νμ¬ λΉλκΈ° λ° μ΄λ²€νΈ κΈ°λ° νλ‘κ·Έλ¨μ ꡬμ±νκΈ° μν κ°λ ₯ν λΌμ΄λΈλ¬λ¦¬μ λλ€. μ£Όλ‘ λΉλκΈ° μ΄λ²€νΈλ₯Ό μ²λ¦¬νλλ‘ μ€κ³λμμ§λ§ μ€νΈλ¦Ό μ²λ¦¬μλ μ¬μ©ν μ μμ΅λλ€.
μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ μ€νΈλ¦Ό μ²λ¦¬λ₯Ό λ³΄λ€ μ½κ² ꡬννκ³ μ μ§ κ΄λ¦¬ν μ μλ μμ μμ€μ μΆμνλ₯Ό μ 곡ν©λλ€.
κ²°λ‘
μ€νΈλ¦Ό μ²λ¦¬ κΈ°μ μ μ¬μ©νμ¬ JavaScript λ°λ³΅μ ν¬νΌ μ±λ₯μ μ΅μ ννλ κ²μ νΉν λκ·λͺ¨ λ°μ΄ν° μΈνΈ λλ μ€μκ° λ°μ΄ν° μ€νΈλ¦Όμ μ²λ¦¬ν λ ν¨μ¨μ μ΄κ³ μλ΅μ±μ΄ λ°μ΄λ μ ν리μΌμ΄μ μ ꡬμΆνλ λ° λ§€μ° μ€μν©λλ€. κΈ°μ‘΄ λ°λ³΅μ ν¬νΌμ μ±λ₯ μν₯κ³Ό μμ±κΈ°, μ¬μ©μ μ§μ λ°λ³΅μ λ° μ΅ν© λ° λ¨λ½ νκ°μ κ°μ κ³ κΈ μ΅μ ν κΈ°μ μ μ΄ν΄ν¨μΌλ‘μ¨ JavaScript μ½λμ μ±λ₯μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€. μ½λμ λ²€μΉλ§νΉμ μννκ³ λ°μ΄ν° μΈνΈ ν¬κΈ°, μμ μ 볡μ‘μ±, νκ²½μ λ©λͺ¨λ¦¬ μ μ½μ λ°λΌ μ¬λ°λ₯Έ μ κ·Ό λ°©μμ μ ννμμμ€. μ€νΈλ¦Ό μ²λ¦¬λ₯Ό νμ©νλ©΄ JavaScript λ°λ³΅μ ν¬νΌμ λͺ¨λ μ μ¬λ ₯μ λ°ννκ³ κΈλ‘λ² μ¬μ©μλ₯Ό μν λ³΄λ€ μ±λ₯μ΄ λ°μ΄λκ³ νμ₯ κ°λ₯ν μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€.